home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / share / system-config-printer / gtkspinner.py < prev    next >
Text File  |  2009-10-19  |  2KB  |  79 lines

  1. #!/usr/bin/env python
  2.  
  3. ## system-config-printer
  4.  
  5. ## Copyright (C) 2009 Tim Waugh <twaugh@redhat.com>
  6.  
  7. ## This program is free software; you can redistribute it and/or modify
  8. ## it under the terms of the GNU General Public License as published by
  9. ## the Free Software Foundation; either version 2 of the License, or
  10. ## (at your option) any later version.
  11.  
  12. ## This program is distributed in the hope that it will be useful,
  13. ## but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15. ## GNU General Public License for more details.
  16.  
  17. ## You should have received a copy of the GNU General Public License
  18. ## along with this program; if not, write to the Free Software
  19. ## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  20.  
  21. import glib
  22. import gtk
  23.  
  24. class Spinner:
  25.     def __init__ (self, image):
  26.         self.image = image
  27.         frames = []
  28.         theme = gtk.icon_theme_get_default ()
  29.         icon_info = theme.lookup_icon ("process-working", 22, 0)
  30.         if icon_info != None:
  31.             size = icon_info.get_base_size ()
  32.             icon = icon_info.get_filename ()
  33.             try:
  34.                 pixbuf = gtk.gdk.pixbuf_new_from_file (icon)
  35.                 grid_width = pixbuf.get_width ()
  36.                 grid_height = pixbuf.get_height ()
  37.                 y = 0
  38.                 while y < grid_height:
  39.                     x = 0
  40.                     while x < grid_width:
  41.                         frame = pixbuf.subpixbuf (x, y, size, size)
  42.                         frames.append (frame)
  43.                         x += size
  44.  
  45.                     y += size
  46.             except gobject.GError:
  47.                 # Failed to load icon.
  48.                 pass
  49.  
  50.         self.frames = frames
  51.         self.n_frames = len (frames)
  52.         self._rest ()
  53.  
  54.     def _set_frame (self, n):
  55.         self._current_frame = n
  56.         if self.n_frames == 0:
  57.             self.image.clear ()
  58.             return
  59.  
  60.         self.image.set_from_pixbuf (self.frames[n])
  61.  
  62.     def _rest (self):
  63.         self._set_frame (0)
  64.  
  65.     def _next_frame (self):
  66.         n = self._current_frame + 1
  67.         if n >= self.n_frames:
  68.             n = 0
  69.  
  70.         self._set_frame (n)
  71.         return True
  72.  
  73.     def start (self, timeout=125):
  74.         self._task = glib.timeout_add (timeout, self._next_frame)
  75.  
  76.     def stop (self):
  77.         glib.source_remove (self._task)
  78.         self._rest ()
  79.